<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>


    <script>


        // 
        //    一个父类拥有一些属性和方法
        //    另一个子类也拥有这些属性和方法  且还有自己的其他的属性和方法    


        // 继承： 子类去继承父类的这些属性和方法，然后也添加自己的属性和方法  的  过程    


        // 借用构造函数继承 ： 改变父类构造函数的this指向
        //     只能继承父类的属性 ， 无法继承父类prototype上的方法


        function Person(name, age) {
            this.type = '人';
            this.name = name;
            this.age = age;
        }

        Person.prototype.say = function () {
            console.log('hi');
        }


        function Student(grade, score, name, age) {
            this.grade = grade;
            this.score = score;

            // 原本Person当做普通函数调用的时候  this是指向window的   现在让他指向Student的实例化对象
            Person.call(this, name, age);
            // this.type = '人';
            // this.name = name;
            // this.age = age;
        }


        // 添加自己的方法
        Student.prototype.speak = function () {
            console.log('hi 我考了' + this.score + '分');
        }


        const s = new Student('3', 100, 'yy', 20);

        console.log(s);





    </script>

</body>

</html>